# 1、    这两个参数是什么意思：*args， ** kwargs？我们为什么要使用它们？
# *args 是不定长参数之元组，会存放所有未命名的变量参数， **kwargs是不定长参数之字典，存放命名参数。当不确定变量的数量时，可以用不定长参数定义，调用时会将所有参数取过来。

# 2、    （先自己想，然后再实验，最后查百度）
# 下面代码会输出什么：
def f(x, l=[]):
    for i in range(x):
        l.append(i * i)
        print(l)


f(2)  # 输出[0]  [0,1]
f(3, [3, 2, 1])  # 输出[3,2,1,0]   [3,2,1,0,1]    [3,2,1,0,1,4]
f(3)  # 输出[0]   [0,1]  [0,1,4]

# 单个调用时没问题，一起调用时结果为：[0]
# [0, 1]
# [3, 2, 1, 0]
# [3, 2, 1, 0, 1]
# [3, 2, 1, 0, 1, 4]
# [0, 1, 0]
# [0, 1, 0, 1]
# [0, 1, 0, 1, 4]
# 百度解析：
# f(2) 时，没有给 l 传参，所以 l 取赋值 []，再追加0，1。默认值的地址不变，默认值变成了 [0, 1]。
# f(3,[3,2,1]) 时，给 l 传参 [3,2,1]，则 l 取[3,2,1]，再追加0，1，4。默认值的地址变了。
# f(3) 时，没有给 l 传参，所以 l 取默认值 [0, 1]，再追加0，1，4。默认值的地址不变，默认值变成了[0, 1, 0, 1, 4]。
# https://blog.csdn.net/maoxuexue/article/details/105911940

# 3、    如何在一个函数内部修改全局变量
# 在函数中用global 全局变量的名字 ，则声明这个变量是全局变量，在函数中这个和全局变量名相同的 变量名 = 数据，就是对全局变量进行了修改。
